package org.yoki.edu.common.protocol.portal.v2.builder;

import org.yoki.edu.common.protocol.portal.msg.PortalV2Msg;
import org.yoki.edu.common.protocol.portal.msg.attr.ChapPasswordMsgAttr;
import org.yoki.edu.common.protocol.portal.msg.attr.UserNameMsgAttr;
import org.yoki.edu.common.protocol.portal.utils.ChapEncryptUtils;

/**
 * @author Sky$
 * @Description: TODO
 * @date 2017/10/29$ 14:37$
 */
public class PortalV2ChapMsgBuilder {

    public PortalV2Msg buildReqChallengeMsg(int serialNo, String userIp, String secret) {
        PortalV2Msg msg = buildV2ChapMsg(secret);
        msg.setType(1);
        msg.setReqId(0);
        msg.setSerialNo(serialNo);
        msg.setUserIp(userIp);
        msg.setAttrNum(0);
        return msg;
    }

    public PortalV2Msg buildReqAuthMsg(int reqId, int serialNo, String userIp, String userName, String password, String challenge, String secret) {
        PortalV2Msg msg = buildV2ChapMsg(secret);
        msg.setType(3);
        msg.setSerialNo(serialNo);
        msg.setReqId(reqId);
        msg.setUserIp(userIp);
        msg.setAttrNum(2);
        UserNameMsgAttr userNameMsgAttr = new UserNameMsgAttr(userName);
        byte[] chapPassworldBytes = ChapEncryptUtils.encryptChap(reqId, challenge, password);
        ChapPasswordMsgAttr chapPasswordMsgAttr = new ChapPasswordMsgAttr(new String(chapPassworldBytes));
        msg.addMsgAttr(userNameMsgAttr).add(chapPasswordMsgAttr);
        return msg;
    }

    public PortalV2Msg buildReqLogoutMsg(int reqId, int serialNo, String userIp, String secret) {
        PortalV2Msg msg = buildV2ChapMsg(secret);
        msg.setType(5);
        msg.setSerialNo(serialNo);
        msg.setReqId(reqId);
        msg.setUserIp(userIp);
        msg.setAttrNum(0);
        return msg;
    }

    public PortalV2Msg buildAffAckAuthMsg(int reqId, int serialNo, String userIp, String secret) {
        PortalV2Msg msg = buildV2ChapMsg(secret);
        msg.setType(7);
        msg.setSerialNo(serialNo);
        msg.setReqId(reqId);
        msg.setUserIp(userIp);
        msg.setAttrNum(0);
        return msg;
    }

    private PortalV2Msg buildV2ChapMsg(String secret) {
        PortalV2Msg msg = new PortalV2Msg();
        msg.setVer(2);

        msg.setPapChap(0);
        msg.setRsvd(0);

        msg.setUserPort(0);
        msg.setErrCode(0);
        return msg;
    }


}
